<?php
/**
 * Zhub - A PHP Framework For API Developer
 *
 * This file is part of the Zhub package.
 *
 * (c) YiLong Fan <fantiq@163.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @author fanyilong <fantiq@163.com>
 * @copyright 2017 fanyilong. All rights reserved.
 * @package Zhub
 * @date 18-2-24
 */

namespace Zhub\Utils;


class Num
{
    /**
     * ip 格式 A.B.C.D 与 long 类型之间的相互转换
     * 且这里的 ip 支持的是 IPV4 格式
     * 在 32 位系统中 ip 转成 long 后存在负数的情况 这种情况在 64位系统中不会出现
     * 这里做了相关兼容
     *
     * @see http://php.net/manual/zh/function.ip2long.php#refsect1-function.ip2long-notes
     * @param $ip
     * @return int|string
     */
    public static function ip($ip)
    {
        return is_int($ip) ? long2ip($ip) : (int)sprintf('%u', ip2long($ip));
    }

    /**
     * 将字符串形式的数字(包括浮点) 转换成对应的数字类型 整形或浮点形
     *
     * @param $num
     * @return float|int
     */
    public static function toNumber($num)
    {
        if (!is_numeric($num)) return 0;
        if (!is_string($num)) return $num;
        return ($num - ($tmp = intval($num))) == 0 ? $tmp : floatval($num);
    }
}
